package 差分与前缀和;

import java.util.Arrays;
import java.util.Scanner;

public class 大学里的树木要维护 {
    //    题目描述
//    教室外有N 棵树(树的编号从1 ，根据不同的位置和树种，学校已经对其进行了多年的维护
//            因为树的排列成线性，且非常长，我们可以将它们看作一条直线给他们编号。
//            由于已经维护了多年，每一个树都由学校的园艺人员进行了维护费用的统计
//            每棵树的前期维护费用各不相同，但是由于未来需要要打药，所以有些树木的维护费用太高的话，就要重新种植。
//            由于维护费用也称区间分布，所以常常需要统一个区间里的树木的维护开销。
//            现给定一个长度为 N 的数组 A以及 M 个查询，A表示第 到维护费用对于每个查询包含一个区间，园艺人员想知道该区间内的树木维护的开销是多
//            少
//            请你编写程序帮帮他!
//            输入描述
//            每组输入的第一行有两个整数 N和 M。N 代表马路的共计多少棵树，M 代表区间的数目，N 和 M之间用一个空格隔开
//            接下来的一行，包含 N 个数A1，2.·，AN，分别表示每棵树的维护费用，每个数之间用空格隔开。
//            接下来的 M 行每行包含两个不同的整数，用一个空格隔开，表示一个区域的起始点工和终止点R的坐标
//            输出描述
//            输出包括 M行，每一行只包含一个整数，表示维护的开销
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();

        int[] arr = new int[n + 1];

        int[] pix = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            arr[i] = scanner.nextInt();
        }
        for (int i = 1; i <= n; i++) {
            pix[i] = pix[i - 1] + arr[i];
        }
        for (int i = 0; i < m; i++) {
            int l = scanner.nextInt();
            int r = scanner.nextInt();
            left_right(pix, l, r);
        }
    }

    public static void left_right(int[] pix, int l, int r) {
        System.out.println(Arrays.toString(pix));

        System.out.println(pix[r + 1] - pix[l]);
    }
}


